#ifndef TASK_H_
#define TASK_H_

#include <Basic.hh>

enum TaskType
{
	StressTaskType
};

//
/**
 * \file Task.hh
 * \author  jsk <jsk.jinsubkim@gmail.com>
 * \version 1.0
 *
 * \class Task Task.hh
 *
 * 지정된 작업의 수행을 보장한다.
 */
class Task
{
public:
	/**
	 * \name generate
	 * 
	 * Task 오브젝트를 생성한다.
	 * 
	 * \return 
	 * 
	 * 성공할 경우 RETURN_OK, 
	 * 실패할 경우 RETURN_OK가 아닌 값.
	 */
	static Task* generate(TaskType Type);
	
	/**
	 * \name perform
	 * 
	 * 특정 작업을 수행한다.
	 * 
	 * \return 
	 * 
	 * 성공할 경우 RETURN_OK, 
	 * 실패할 경우 RETURN_OK가 아닌 값.
	 */
	virtual ResultOf perform() = 0;
	
	/**
	 * \name setData
	 * 
	 * 작업에 사용할 데이터를 설정한다.
	 * 
	 * \return 
	 * 
	 * 성공할 경우 RETURN_OK, 
	 * 실패할 경우 RETURN_OK가 아닌 값.
	 */
	virtual ResultOf setData(void* Data) = 0;
};

#endif //TASK_H_